Data is from August, 2017 sequencing. This is week 4 of experiment 1

Download and map:

Working on Whitney for read mapping. Directory: /Network/Servers/avalanche.plb.ucdavis.edu/Volumes/Mammoth/Users/jmaloof/2017/Wyoming-microbiome/20170830-data/

20170830 reads

Build index (not done…already exists)

cd ~/Sequences/ref_genomes/B_rapa/genome/V3.0

wget http://brassicadb.org/brad/datasets/pub/BrassicaceaeGenome/Brassica_rapa/V3.0/Brapa_genome_v3.0_cds.fasta.gz 

kallisto index -i B_rapa_CDS_V3.0_k31_kallisto_index Brapa_genome_v3.0_cds.fasta.gz

cd ~/2017/Wyoming-microbiome//20170830-samples/20170830-data

Map reads

mkdir kallisto_out_V3.0

#actually a fish loop
for file in (ls raw-fastq/2017-08-27/*.fastq.gz)
  echo $file
  set newfile (basename $file _R1_001.fastq.gz)
  kallisto quant -i ~/Sequences/ref_genomes/B_rapa/genome/V3.0/B_rapa_CDS_V3.0_k31_kallisto_index  -o kallisto_out_V3.0/$newfile --single -l 200 -s 40 -t 4 --plaintext $file
end

Move the counts to my local computer

NEED TO MODIFY BELOW

cd /Users/jmaloof/git/Br_Microbe_Paper_2021/RNA/input/20170830-samples
lftp sftp://whitney.plb.ucdavis.edu
  cd 2017/Wyoming-microbiome/20170830-samples/20170830-data
  mirror kallisto_out_V3.0

remove unused files

cd /Users/jmaloof/git/Br_Microbe_Paper_2021/RNA/input/20170830-samples/kallisto_out_V3.0
rm */*.json

compress tsv files

cd /Users/jmaloof/git/Br_Microbe_Paper_2021/RNA/input/20170830-samples/kallisto_out_V3.0
gzip */abundance.tsv

Get counts into R

library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ───────────────────────────────────── tidyverse 1.3.1 ──
✓ ggplot2 3.3.3     ✓ purrr   0.3.4
✓ tibble  3.1.2     ✓ dplyr   1.0.6
✓ tidyr   1.1.3     ✓ stringr 1.4.0
✓ readr   1.4.0     ✓ forcats 0.5.1
── Conflicts ──────────────────────────────────────── tidyverse_conflicts() ──
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
library(stringr)
library(edgeR)
Loading required package: limma
kallisto_files <- dir(path = "../../input/20170830-samples/kallisto_out_V3.0",pattern="abundance.tsv",recursive = TRUE,full.names = TRUE)
kallisto_names <- str_split(kallisto_files,"/",simplify=TRUE)[,6]
head(kallisto_names)
[1] "wyo_leaf_R500_10_417_S65_L001" "wyo_leaf_R500_10_417_S65_L002"
[3] "wyo_leaf_R500_10_417_S65_L003" "wyo_leaf_R500_10_417_S65_L004"
[5] "wyo_leaf_R500_10_419_S66_L001" "wyo_leaf_R500_10_419_S66_L002"
counts <- tibble(sample = kallisto_names, file = kallisto_files) %>%
  mutate(countdata = map(kallisto_files, read_tsv)) %>%
  select(-file)

── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)


── Column specification ──────────────────────────────────────────────────────
cols(
  target_id = col_character(),
  length = col_double(),
  eff_length = col_double(),
  est_counts = col_double(),
  tpm = col_double()
)
head(counts)

reformat into rows = genes and columns = samples

counts <- counts %>% unnest(countdata) %>%
  mutate(sample = str_remove(sample, "_L.*")) %>% 
  select(sample, target_id, est_counts) %>%
  group_by(sample, target_id) %>%
  summarize(est_counts=sum(est_counts)) %>% # sum up counts from multiple lanes
  ungroup() %>%
  pivot_wider(id_cols = target_id,
              names_from = sample,
              values_from = est_counts)
`summarise()` has grouped output by 'sample'. You can override using the `.groups` argument.
head(counts)
dim(counts)
[1] 46250    25
write_csv(counts,"../../output/20170830_V3.0_raw_counts_.csv.gz")

make sample description data frame

#CONTINUE FROM HERE

summarize counts

pl.orig <- counts[,-1] %>% colSums() %>% tibble(sample=names(.),count=.) %>%
  ggplot(aes(x=sample,y=count)) + 
  geom_col() +
  theme(axis.text.x  = element_text(angle=90, vjust=0.5,size = 7)) 
pl.orig

load to edgeR, normalize

#confirm that everthing is in the right order
all(colnames(counts)[-1]==sample.description$sample)
[1] TRUE
dge <- DGEList(counts[,-1],
               group=sample.description$group,
               samples=sample.description,
               genes=counts$target_id)
dge <- calcNormFactors(dge)
barplot(dge$samples$lib.size)

ggplot(dge$samples,aes(x=sample,y=norm.factors,fill=tissue)) + geom_col() + 
  theme(axis.text.x  = element_text(angle=90, vjust=0.5,size = 7)) 

ggplot(dge$samples,aes(x=sample,y=norm.factors,fill=genotype)) + geom_col() + 
  theme(axis.text.x  = element_text(angle=90, vjust=0.5,size = 7)) 

ggplot(dge$samples,aes(x=sample,y=norm.factors,fill=as.factor(block))) + geom_col() +
  theme(axis.text.x  = element_text(angle=90, vjust=0.5,size = 7)) 

do separately for leaf and root values

counts.leaf <- counts %>% select(target_id, contains("leaf"))
counts.root <- counts %>% select(target_id, contains("root"))
sample.description.leaf <- sample.description %>% filter(tissue=="leaf")
sample.description.root <- sample.description %>% filter(tissue=="root")

Leaf

#confirm that everthing is in the right order
all(colnames(counts.leaf)[-1]==sample.description.leaf$sample)
[1] TRUE
dge.leaf <- DGEList(counts.leaf[,-1],
                    group=sample.description.leaf$group,
                    samples=sample.description.leaf,
                    genes=counts.leaf$target_id)
dge.leaf <- calcNormFactors(dge.leaf)

Root

#confirm that everthing is in the right order
all(colnames(counts.root)[-1]==sample.description.root$sample)
[1] TRUE
dge.root <- DGEList(counts.root[,-1],
                    group=sample.description.root$group,
                    samples=sample.description.root,
                    genes=counts.root$target_id)
dge.root <- calcNormFactors(dge.root)
save(dge.leaf,dge.root,sample.description.leaf,sample.description.root,file="../../output/edgeR_dge_objects_exp1_week4.Rdata")

Write out cpm values

cpm.leaf.w <- bind_cols(dge.leaf$gene,as_tibble(cpm(dge.leaf))) %>% as_tibble() %>% rename(transcript_ID=genes)
head(cpm.leaf.w)
write_csv(cpm.leaf.w,"../../output/cpm_wide_exp1_week4_leaf_samples.csv.gz")
cpm.root.w <- bind_cols(dge.root$gene,as_tibble(cpm(dge.root))) %>% as_tibble() %>% rename(transcript_ID=genes)
head(cpm.root.w)
write_csv(cpm.root.w,"../../output/cpm_wide_exp1_week4_root_samples.csv.gz")

Also let’s reformat this to long format and add metadata

cpm.leaf.long <- cpm.leaf.w %>% 
  gather(-transcript_ID,key = sample,value=cpm) %>%
  left_join(sample.description.leaf)
Joining, by = "sample"
head(cpm.leaf.long)
write_csv(cpm.leaf.long,"../../output/cpm_long_with_metadata_exp1_week4_leaf_samples.csv.gz")
cpm.root.long <- cpm.root.w %>% 
  gather(-transcript_ID,key = sample,value=cpm) %>%
  left_join(sample.description.root)
Joining, by = "sample"
head(cpm.root.long)
write_csv(cpm.root.long,"../../output/cpm_long_with_metadata_exp1_week4_root_samples.csv.gz")

compute and write out voom-transformed values

design.leaf <- model.matrix(~ sample.description.leaf$group)
dge4voom.leaf <- dge.leaf[rowSums(cpm(dge.leaf)>1) >= 6,,keep.lib.sizes=FALSE]
dge4voom.leaf <- calcNormFactors(dge4voom.leaf)
data.voom.leaf <- voom(dge4voom.leaf,design = design.leaf)
data.voom.exp.leaf <- bind_cols(data.voom.leaf$genes,as_tibble(data.voom.leaf$E)) %>%
  rename(transcript_ID=genes) %>% as_tibble()
head(data.voom.exp.leaf)
write_csv(data.voom.exp.leaf, "../../output/voom_expression_exp1_week4_T6_leaf_samples.csv.gz")
voom.long.leaf <- data.voom.exp.leaf %>% 
  gather(-transcript_ID,key = sample,value=expression) %>%
  left_join(sample.description.leaf)
Joining, by = "sample"
head(voom.long.leaf)
hist(voom.long.leaf$expression)

write_csv(voom.long.leaf,"../../output/voom_long_with_metadata_exp1_week4_T6_leaf_samples.csv.gz")
design.root <- model.matrix(~ sample.description.root$group)
dge4voom.root <- dge.root[rowSums(cpm(dge.root)>1) >= 6,,keep.lib.sizes=FALSE]
dge4voom.root <- calcNormFactors(dge4voom.root)
data.voom.root <- voom(dge4voom.root,design = design.root)
data.voom.exp.root <- bind_cols(data.voom.root$genes,as_tibble(data.voom.root$E)) %>%
  rename(transcript_ID=genes) %>% as_tibble()
head(data.voom.exp.root)
write_csv(data.voom.exp.root, "../../output/voom_expression_exp1_week4_T6_root_samples.csv.gz")
voom.long.root <- data.voom.exp.root %>% 
  gather(-transcript_ID,key = sample,value=expression) %>%
  left_join(sample.description.root)
Joining, by = "sample"
head(voom.long.root)
hist(voom.long.root$expression)

write_csv(voom.long.root,"../../output/voom_long_with_metadata_exp1_week4_T6_root_samples.csv.gz")
LS0tCnRpdGxlOiAiUk5BIGV4cHJlc3Npb24gYW5hbHlzaXMgb2YgQnJhc3NpY2EgTWljcm9iZSBEYXRhLiBJOiBwcmVwIGRhdGEiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCkRhdGEgaXMgZnJvbSBBdWd1c3QsIDIwMTcgc2VxdWVuY2luZy4gIFRoaXMgaXMgd2VlayA0IG9mIGV4cGVyaW1lbnQgMQoKIyMgRG93bmxvYWQgYW5kIG1hcDoKCldvcmtpbmcgb24gV2hpdG5leSBmb3IgcmVhZCBtYXBwaW5nLiAgRGlyZWN0b3J5OiBgL05ldHdvcmsvU2VydmVycy9hdmFsYW5jaGUucGxiLnVjZGF2aXMuZWR1L1ZvbHVtZXMvTWFtbW90aC9Vc2Vycy9qbWFsb29mLzIwMTcvV3lvbWluZy1taWNyb2Jpb21lLzIwMTcwODMwLWRhdGEvYAoKIyMjIDIwMTcwODMwIHJlYWRzCgpCdWlsZCBpbmRleCAobm90IGRvbmUuLi5hbHJlYWR5IGV4aXN0cykKYGBge3IsIGVuZ2luZT0nYmFzaCcsIGV2YWw9RkFMU0V9CmNkIH4vU2VxdWVuY2VzL3JlZl9nZW5vbWVzL0JfcmFwYS9nZW5vbWUvVjMuMAoKd2dldCBodHRwOi8vYnJhc3NpY2FkYi5vcmcvYnJhZC9kYXRhc2V0cy9wdWIvQnJhc3NpY2FjZWFlR2Vub21lL0JyYXNzaWNhX3JhcGEvVjMuMC9CcmFwYV9nZW5vbWVfdjMuMF9jZHMuZmFzdGEuZ3ogCgprYWxsaXN0byBpbmRleCAtaSBCX3JhcGFfQ0RTX1YzLjBfazMxX2thbGxpc3RvX2luZGV4IEJyYXBhX2dlbm9tZV92My4wX2Nkcy5mYXN0YS5negoKY2Qgfi8yMDE3L1d5b21pbmctbWljcm9iaW9tZS8vMjAxNzA4MzAtc2FtcGxlcy8yMDE3MDgzMC1kYXRhCmBgYAoKTWFwIHJlYWRzCgpgYGB7ciwgZW5naW5lPSdiYXNoJyxldmFsPUZBTFNFfQpta2RpciBrYWxsaXN0b19vdXRfVjMuMAoKI2FjdHVhbGx5IGEgZmlzaCBsb29wCmZvciBmaWxlIGluIChscyByYXctZmFzdHEvMjAxNy0wOC0yNy8qLmZhc3RxLmd6KQogIGVjaG8gJGZpbGUKICBzZXQgbmV3ZmlsZSAoYmFzZW5hbWUgJGZpbGUgX1IxXzAwMS5mYXN0cS5neikKICBrYWxsaXN0byBxdWFudCAtaSB+L1NlcXVlbmNlcy9yZWZfZ2Vub21lcy9CX3JhcGEvZ2Vub21lL1YzLjAvQl9yYXBhX0NEU19WMy4wX2szMV9rYWxsaXN0b19pbmRleCAgLW8ga2FsbGlzdG9fb3V0X1YzLjAvJG5ld2ZpbGUgLS1zaW5nbGUgLWwgMjAwIC1zIDQwIC10IDQgLS1wbGFpbnRleHQgJGZpbGUKZW5kCmBgYAoKTW92ZSB0aGUgY291bnRzIHRvIG15IGxvY2FsIGNvbXB1dGVyCgojIyMgTkVFRCBUTyBNT0RJRlkgQkVMT1cKCmBgYHtyLCBlbmdpbmU9J2Jhc2gnLCBldmFsPUZBTFNFfQpjZCAvVXNlcnMvam1hbG9vZi9naXQvQnJfTWljcm9iZV9QYXBlcl8yMDIxL1JOQS9pbnB1dC8yMDE3MDgzMC1zYW1wbGVzCmxmdHAgc2Z0cDovL3doaXRuZXkucGxiLnVjZGF2aXMuZWR1CiAgY2QgMjAxNy9XeW9taW5nLW1pY3JvYmlvbWUvMjAxNzA4MzAtc2FtcGxlcy8yMDE3MDgzMC1kYXRhCiAgbWlycm9yIGthbGxpc3RvX291dF9WMy4wCmBgYAoKcmVtb3ZlIHVudXNlZCBmaWxlcwpgYGB7ciwgZW5naW5lPSdiYXNoJywgZXZhbD1GQUxTRX0KY2QgL1VzZXJzL2ptYWxvb2YvZ2l0L0JyX01pY3JvYmVfUGFwZXJfMjAyMS9STkEvaW5wdXQvMjAxNzA4MzAtc2FtcGxlcy9rYWxsaXN0b19vdXRfVjMuMApybSAqLyouanNvbgpgYGAKCmNvbXByZXNzIHRzdiBmaWxlcwpgYGB7ciwgZW5naW5lPSdiYXNoJywgZXZhbD1GQUxTRX0KY2QgL1VzZXJzL2ptYWxvb2YvZ2l0L0JyX01pY3JvYmVfUGFwZXJfMjAyMS9STkEvaW5wdXQvMjAxNzA4MzAtc2FtcGxlcy9rYWxsaXN0b19vdXRfVjMuMApnemlwICovYWJ1bmRhbmNlLnRzdgpgYGAKCgojIyBHZXQgY291bnRzIGludG8gUgoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHN0cmluZ3IpCmxpYnJhcnkoZWRnZVIpCmBgYAoKCgpgYGB7cn0Ka2FsbGlzdG9fZmlsZXMgPC0gZGlyKHBhdGggPSAiLi4vLi4vaW5wdXQvMjAxNzA4MzAtc2FtcGxlcy9rYWxsaXN0b19vdXRfVjMuMCIscGF0dGVybj0iYWJ1bmRhbmNlLnRzdiIscmVjdXJzaXZlID0gVFJVRSxmdWxsLm5hbWVzID0gVFJVRSkKa2FsbGlzdG9fbmFtZXMgPC0gc3RyX3NwbGl0KGthbGxpc3RvX2ZpbGVzLCIvIixzaW1wbGlmeT1UUlVFKVssNl0KaGVhZChrYWxsaXN0b19uYW1lcykKYGBgCgpgYGB7cn0KY291bnRzIDwtIHRpYmJsZShzYW1wbGUgPSBrYWxsaXN0b19uYW1lcywgZmlsZSA9IGthbGxpc3RvX2ZpbGVzKSAlPiUKICBtdXRhdGUoY291bnRkYXRhID0gbWFwKGthbGxpc3RvX2ZpbGVzLCByZWFkX3RzdikpICU+JQogIHNlbGVjdCgtZmlsZSkKCmhlYWQoY291bnRzKQpgYGAKCnJlZm9ybWF0IGludG8gcm93cyA9IGdlbmVzIGFuZCBjb2x1bW5zID0gc2FtcGxlcwpgYGB7cn0KY291bnRzIDwtIGNvdW50cyAlPiUgdW5uZXN0KGNvdW50ZGF0YSkgJT4lCiAgbXV0YXRlKHNhbXBsZSA9IHN0cl9yZW1vdmUoc2FtcGxlLCAiX0wuKiIpKSAlPiUgCiAgc2VsZWN0KHNhbXBsZSwgdGFyZ2V0X2lkLCBlc3RfY291bnRzKSAlPiUKICBncm91cF9ieShzYW1wbGUsIHRhcmdldF9pZCkgJT4lCiAgc3VtbWFyaXplKGVzdF9jb3VudHM9c3VtKGVzdF9jb3VudHMpKSAlPiUgIyBzdW0gdXAgY291bnRzIGZyb20gbXVsdGlwbGUgbGFuZXMKICB1bmdyb3VwKCkgJT4lCiAgcGl2b3Rfd2lkZXIoaWRfY29scyA9IHRhcmdldF9pZCwKICAgICAgICAgICAgICBuYW1lc19mcm9tID0gc2FtcGxlLAogICAgICAgICAgICAgIHZhbHVlc19mcm9tID0gZXN0X2NvdW50cykKYGBgCgpgYGB7cn0KaGVhZChjb3VudHMpCmRpbShjb3VudHMpCmBgYAoKYGBge3J9CndyaXRlX2Nzdihjb3VudHMsIi4uLy4uL291dHB1dC8yMDE3MDgzMF9WMy4wX3Jhd19jb3VudHNfLmNzdi5neiIpCmBgYAoKIyMgbWFrZSBzYW1wbGUgZGVzY3JpcHRpb24gZGF0YSBmcmFtZQoKI0NPTlRJTlVFIEZST00gSEVSRQoKYGBge3J9CnNhbXBsZS5kZXNjcmlwdGlvbiA8LSB0aWJibGUoc2FtcGxlPWNvbG5hbWVzKGNvdW50cylbLTFdKSAlPiUKICBzZXBhcmF0ZShzYW1wbGUsCiAgICAgICAgICAgYygibG9jYXRpb24iLCJ0aXNzdWUiLCJnZW5vdHlwZSIsImJsb2NrIiwicG90IiksCiAgICAgICAgICAgcmVtb3ZlPUZBTFNFLAogICAgICAgICAgIGNvbnZlcnQ9VFJVRSkgCmhlYWQoc2FtcGxlLmRlc2NyaXB0aW9uKQoKIyMgZ2V0IGFkZGl0aW9uYWwgbWV0YWRhdGEKc2FtcGxlLmluZm8gPC0gcmVhZHhsOjpyZWFkX2V4Y2VsKCIuLi8uLi9pbnB1dC93eTAwMV9STkFzZXEueGxzeCIsc2hlZXQgPSAxKQpoZWFkKHNhbXBsZS5pbmZvKQoKIyNjb21iaW5lCnNhbXBsZS5kZXNjcmlwdGlvbiA8LSBsZWZ0X2pvaW4oc2FtcGxlLmRlc2NyaXB0aW9uLCBzYW1wbGUuaW5mbykKc2FtcGxlLmRlc2NyaXB0aW9uIDwtIHNhbXBsZS5kZXNjcmlwdGlvbiAlPiUgCiAgbXV0YXRlKGdyb3VwPXBhc3RlKHRpc3N1ZSxnZW5vdHlwZSxzb2lsLGF1dG9jbGF2ZSxzZXA9Il8iKSkKaGVhZChzYW1wbGUuZGVzY3JpcHRpb24pCnNhbXBsZS5kZXNjcmlwdGlvbiAlPiUgc3VtbWFyaXplKG5fZGlzdGluY3QoZ3JvdXApKQpgYGAKCiMjIHN1bW1hcml6ZSBjb3VudHMKYGBge3J9CnBsLm9yaWcgPC0gY291bnRzWywtMV0gJT4lIGNvbFN1bXMoKSAlPiUgdGliYmxlKHNhbXBsZT1uYW1lcyguKSxjb3VudD0uKSAlPiUKICBnZ3Bsb3QoYWVzKHg9c2FtcGxlLHk9Y291bnQpKSArIAogIGdlb21fY29sKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ICA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCwgdmp1c3Q9MC41LHNpemUgPSA3KSkgCnBsLm9yaWcKYGBgCgojIyBsb2FkIHRvIGVkZ2VSLCBub3JtYWxpemUKCmBgYHtyfQojY29uZmlybSB0aGF0IGV2ZXJ0aGluZyBpcyBpbiB0aGUgcmlnaHQgb3JkZXIKYWxsKGNvbG5hbWVzKGNvdW50cylbLTFdPT1zYW1wbGUuZGVzY3JpcHRpb24kc2FtcGxlKQpkZ2UgPC0gREdFTGlzdChjb3VudHNbLC0xXSwKICAgICAgICAgICAgICAgZ3JvdXA9c2FtcGxlLmRlc2NyaXB0aW9uJGdyb3VwLAogICAgICAgICAgICAgICBzYW1wbGVzPXNhbXBsZS5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgZ2VuZXM9Y291bnRzJHRhcmdldF9pZCkKYGBgCgpgYGB7cn0KZGdlIDwtIGNhbGNOb3JtRmFjdG9ycyhkZ2UpCmJhcnBsb3QoZGdlJHNhbXBsZXMkbGliLnNpemUpCmdncGxvdChkZ2Ukc2FtcGxlcyxhZXMoeD1zYW1wbGUseT1ub3JtLmZhY3RvcnMsZmlsbD10aXNzdWUpKSArIGdlb21fY29sKCkgKyAKICB0aGVtZShheGlzLnRleHQueCAgPSBlbGVtZW50X3RleHQoYW5nbGU9OTAsIHZqdXN0PTAuNSxzaXplID0gNykpIApnZ3Bsb3QoZGdlJHNhbXBsZXMsYWVzKHg9c2FtcGxlLHk9bm9ybS5mYWN0b3JzLGZpbGw9Z2Vub3R5cGUpKSArIGdlb21fY29sKCkgKyAKICB0aGVtZShheGlzLnRleHQueCAgPSBlbGVtZW50X3RleHQoYW5nbGU9OTAsIHZqdXN0PTAuNSxzaXplID0gNykpIApnZ3Bsb3QoZGdlJHNhbXBsZXMsYWVzKHg9c2FtcGxlLHk9bm9ybS5mYWN0b3JzLGZpbGw9YXMuZmFjdG9yKGJsb2NrKSkpICsgZ2VvbV9jb2woKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwLCB2anVzdD0wLjUsc2l6ZSA9IDcpKSAKYGBgCgoKIyBkbyBzZXBhcmF0ZWx5IGZvciBsZWFmIGFuZCByb290IHZhbHVlcwoKYGBge3J9CmNvdW50cy5sZWFmIDwtIGNvdW50cyAlPiUgc2VsZWN0KHRhcmdldF9pZCwgY29udGFpbnMoImxlYWYiKSkKY291bnRzLnJvb3QgPC0gY291bnRzICU+JSBzZWxlY3QodGFyZ2V0X2lkLCBjb250YWlucygicm9vdCIpKQpzYW1wbGUuZGVzY3JpcHRpb24ubGVhZiA8LSBzYW1wbGUuZGVzY3JpcHRpb24gJT4lIGZpbHRlcih0aXNzdWU9PSJsZWFmIikKc2FtcGxlLmRlc2NyaXB0aW9uLnJvb3QgPC0gc2FtcGxlLmRlc2NyaXB0aW9uICU+JSBmaWx0ZXIodGlzc3VlPT0icm9vdCIpCmBgYAoKTGVhZgpgYGB7cn0KI2NvbmZpcm0gdGhhdCBldmVydGhpbmcgaXMgaW4gdGhlIHJpZ2h0IG9yZGVyCmFsbChjb2xuYW1lcyhjb3VudHMubGVhZilbLTFdPT1zYW1wbGUuZGVzY3JpcHRpb24ubGVhZiRzYW1wbGUpCmRnZS5sZWFmIDwtIERHRUxpc3QoY291bnRzLmxlYWZbLC0xXSwKICAgICAgICAgICAgICAgICAgICBncm91cD1zYW1wbGUuZGVzY3JpcHRpb24ubGVhZiRncm91cCwKICAgICAgICAgICAgICAgICAgICBzYW1wbGVzPXNhbXBsZS5kZXNjcmlwdGlvbi5sZWFmLAogICAgICAgICAgICAgICAgICAgIGdlbmVzPWNvdW50cy5sZWFmJHRhcmdldF9pZCkKZGdlLmxlYWYgPC0gY2FsY05vcm1GYWN0b3JzKGRnZS5sZWFmKQpgYGAKClJvb3QKYGBge3J9CiNjb25maXJtIHRoYXQgZXZlcnRoaW5nIGlzIGluIHRoZSByaWdodCBvcmRlcgphbGwoY29sbmFtZXMoY291bnRzLnJvb3QpWy0xXT09c2FtcGxlLmRlc2NyaXB0aW9uLnJvb3Qkc2FtcGxlKQpkZ2Uucm9vdCA8LSBER0VMaXN0KGNvdW50cy5yb290WywtMV0sCiAgICAgICAgICAgICAgICAgICAgZ3JvdXA9c2FtcGxlLmRlc2NyaXB0aW9uLnJvb3QkZ3JvdXAsCiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcz1zYW1wbGUuZGVzY3JpcHRpb24ucm9vdCwKICAgICAgICAgICAgICAgICAgICBnZW5lcz1jb3VudHMucm9vdCR0YXJnZXRfaWQpCmRnZS5yb290IDwtIGNhbGNOb3JtRmFjdG9ycyhkZ2Uucm9vdCkKYGBgCgpgYGB7cn0Kc2F2ZShkZ2UubGVhZixkZ2Uucm9vdCxzYW1wbGUuZGVzY3JpcHRpb24ubGVhZixzYW1wbGUuZGVzY3JpcHRpb24ucm9vdCxmaWxlPSIuLi8uLi9vdXRwdXQvZWRnZVJfZGdlX29iamVjdHNfZXhwMV93ZWVrNC5SZGF0YSIpCmBgYAoKCiMjIFdyaXRlIG91dCBjcG0gdmFsdWVzCgpgYGB7cn0KY3BtLmxlYWYudyA8LSBiaW5kX2NvbHMoZGdlLmxlYWYkZ2VuZSxhc190aWJibGUoY3BtKGRnZS5sZWFmKSkpICU+JSBhc190aWJibGUoKSAlPiUgcmVuYW1lKHRyYW5zY3JpcHRfSUQ9Z2VuZXMpCmhlYWQoY3BtLmxlYWYudykKd3JpdGVfY3N2KGNwbS5sZWFmLncsIi4uLy4uL291dHB1dC9jcG1fd2lkZV9leHAxX3dlZWs0X2xlYWZfc2FtcGxlcy5jc3YuZ3oiKQpgYGAKCmBgYHtyfQpjcG0ucm9vdC53IDwtIGJpbmRfY29scyhkZ2Uucm9vdCRnZW5lLGFzX3RpYmJsZShjcG0oZGdlLnJvb3QpKSkgJT4lIGFzX3RpYmJsZSgpICU+JSByZW5hbWUodHJhbnNjcmlwdF9JRD1nZW5lcykKaGVhZChjcG0ucm9vdC53KQp3cml0ZV9jc3YoY3BtLnJvb3QudywiLi4vLi4vb3V0cHV0L2NwbV93aWRlX2V4cDFfd2VlazRfcm9vdF9zYW1wbGVzLmNzdi5neiIpCmBgYAoKCkFsc28gbGV0J3MgcmVmb3JtYXQgdGhpcyB0byBsb25nIGZvcm1hdCBhbmQgYWRkIG1ldGFkYXRhCgpgYGB7cn0KY3BtLmxlYWYubG9uZyA8LSBjcG0ubGVhZi53ICU+JSAKICBnYXRoZXIoLXRyYW5zY3JpcHRfSUQsa2V5ID0gc2FtcGxlLHZhbHVlPWNwbSkgJT4lCiAgbGVmdF9qb2luKHNhbXBsZS5kZXNjcmlwdGlvbi5sZWFmKQpoZWFkKGNwbS5sZWFmLmxvbmcpCndyaXRlX2NzdihjcG0ubGVhZi5sb25nLCIuLi8uLi9vdXRwdXQvY3BtX2xvbmdfd2l0aF9tZXRhZGF0YV9leHAxX3dlZWs0X2xlYWZfc2FtcGxlcy5jc3YuZ3oiKQpgYGAKCmBgYHtyfQpjcG0ucm9vdC5sb25nIDwtIGNwbS5yb290LncgJT4lIAogIGdhdGhlcigtdHJhbnNjcmlwdF9JRCxrZXkgPSBzYW1wbGUsdmFsdWU9Y3BtKSAlPiUKICBsZWZ0X2pvaW4oc2FtcGxlLmRlc2NyaXB0aW9uLnJvb3QpCmhlYWQoY3BtLnJvb3QubG9uZykKd3JpdGVfY3N2KGNwbS5yb290LmxvbmcsIi4uLy4uL291dHB1dC9jcG1fbG9uZ193aXRoX21ldGFkYXRhX2V4cDFfd2VlazRfcm9vdF9zYW1wbGVzLmNzdi5neiIpCmBgYAoKCiMjIGNvbXB1dGUgYW5kIHdyaXRlIG91dCB2b29tLXRyYW5zZm9ybWVkIHZhbHVlcwoKYGBge3J9CmRlc2lnbi5sZWFmIDwtIG1vZGVsLm1hdHJpeCh+IHNhbXBsZS5kZXNjcmlwdGlvbi5sZWFmJGdyb3VwKQpkZ2U0dm9vbS5sZWFmIDwtIGRnZS5sZWFmW3Jvd1N1bXMoY3BtKGRnZS5sZWFmKT4xKSA+PSA2LCxrZWVwLmxpYi5zaXplcz1GQUxTRV0KZGdlNHZvb20ubGVhZiA8LSBjYWxjTm9ybUZhY3RvcnMoZGdlNHZvb20ubGVhZikKZGF0YS52b29tLmxlYWYgPC0gdm9vbShkZ2U0dm9vbS5sZWFmLGRlc2lnbiA9IGRlc2lnbi5sZWFmKQpkYXRhLnZvb20uZXhwLmxlYWYgPC0gYmluZF9jb2xzKGRhdGEudm9vbS5sZWFmJGdlbmVzLGFzX3RpYmJsZShkYXRhLnZvb20ubGVhZiRFKSkgJT4lCiAgcmVuYW1lKHRyYW5zY3JpcHRfSUQ9Z2VuZXMpICU+JSBhc190aWJibGUoKQpoZWFkKGRhdGEudm9vbS5leHAubGVhZikKd3JpdGVfY3N2KGRhdGEudm9vbS5leHAubGVhZiwgIi4uLy4uL291dHB1dC92b29tX2V4cHJlc3Npb25fZXhwMV93ZWVrNF9UNl9sZWFmX3NhbXBsZXMuY3N2Lmd6IikKYGBgCgoKYGBge3J9CnZvb20ubG9uZy5sZWFmIDwtIGRhdGEudm9vbS5leHAubGVhZiAlPiUgCiAgZ2F0aGVyKC10cmFuc2NyaXB0X0lELGtleSA9IHNhbXBsZSx2YWx1ZT1leHByZXNzaW9uKSAlPiUKICBsZWZ0X2pvaW4oc2FtcGxlLmRlc2NyaXB0aW9uLmxlYWYpCmhlYWQodm9vbS5sb25nLmxlYWYpCmhpc3Qodm9vbS5sb25nLmxlYWYkZXhwcmVzc2lvbikKd3JpdGVfY3N2KHZvb20ubG9uZy5sZWFmLCIuLi8uLi9vdXRwdXQvdm9vbV9sb25nX3dpdGhfbWV0YWRhdGFfZXhwMV93ZWVrNF9UNl9sZWFmX3NhbXBsZXMuY3N2Lmd6IikKYGBgCgoKYGBge3J9CmRlc2lnbi5yb290IDwtIG1vZGVsLm1hdHJpeCh+IHNhbXBsZS5kZXNjcmlwdGlvbi5yb290JGdyb3VwKQpkZ2U0dm9vbS5yb290IDwtIGRnZS5yb290W3Jvd1N1bXMoY3BtKGRnZS5yb290KT4xKSA+PSA2LCxrZWVwLmxpYi5zaXplcz1GQUxTRV0KZGdlNHZvb20ucm9vdCA8LSBjYWxjTm9ybUZhY3RvcnMoZGdlNHZvb20ucm9vdCkKZGF0YS52b29tLnJvb3QgPC0gdm9vbShkZ2U0dm9vbS5yb290LGRlc2lnbiA9IGRlc2lnbi5yb290KQpkYXRhLnZvb20uZXhwLnJvb3QgPC0gYmluZF9jb2xzKGRhdGEudm9vbS5yb290JGdlbmVzLGFzX3RpYmJsZShkYXRhLnZvb20ucm9vdCRFKSkgJT4lCiAgcmVuYW1lKHRyYW5zY3JpcHRfSUQ9Z2VuZXMpICU+JSBhc190aWJibGUoKQpoZWFkKGRhdGEudm9vbS5leHAucm9vdCkKd3JpdGVfY3N2KGRhdGEudm9vbS5leHAucm9vdCwgIi4uLy4uL291dHB1dC92b29tX2V4cHJlc3Npb25fZXhwMV93ZWVrNF9UNl9yb290X3NhbXBsZXMuY3N2Lmd6IikKYGBgCgoKYGBge3J9CnZvb20ubG9uZy5yb290IDwtIGRhdGEudm9vbS5leHAucm9vdCAlPiUgCiAgZ2F0aGVyKC10cmFuc2NyaXB0X0lELGtleSA9IHNhbXBsZSx2YWx1ZT1leHByZXNzaW9uKSAlPiUKICBsZWZ0X2pvaW4oc2FtcGxlLmRlc2NyaXB0aW9uLnJvb3QpCmhlYWQodm9vbS5sb25nLnJvb3QpCmhpc3Qodm9vbS5sb25nLnJvb3QkZXhwcmVzc2lvbikKd3JpdGVfY3N2KHZvb20ubG9uZy5yb290LCIuLi8uLi9vdXRwdXQvdm9vbV9sb25nX3dpdGhfbWV0YWRhdGFfZXhwMV93ZWVrNF9UNl9yb290X3NhbXBsZXMuY3N2Lmd6IikKYGBgCg==